<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 原型：
        // 每个函数都有一个 prototype 属性，被称为显式原型，里面包含了这个构造函数公共的方法
        // 每个实例对象都会有 _proto_属性,其被称为隐式原型
        // 每个 prototype 原型都有一个 constructor 属性，指向它关联的构造函数。
        // 原型链：
        // 对象查找属性或方法时，会先从自身查找，若找不到就去它的原型上查找，再从原型的原型上查找，
        // 以此类推，直到找到或到最顶层为止，这就形成了一个原型链
       
        // js的内置对象
        var arr = [1, 2]//字面量方式
        var json = {}
        // 实例化方式，new Array new的是构造函数，得到的var变量叫对象
        var arr1 = new Array(1, 2);
        var str = ''
        // 对象下有属性constructor，可以得到构造函数
        console.log(arr.constructor);//Array
        console.log(json.constructor);//Object
        console.log(str.constructor);//string

        console.dir(Array);//查看构造函数属性
        console.log(Array.prototype);//构造函数原型上是方法
        console.log(json.prototype);//构造函数原型上是方法
        console.log(str.prototype);//构造函数原型上是方法

        console.log(arr);//现实中的对象
        // 对象都有一个隐式属性,可以得到对象的方法
        console.log(arr.__proto__);

        // 构造函数有显示属性prototype，对象有隐式原型 __proto__他们是相等的
        console.log(Array.prototype == arr.__proto__);//true

        // js中所有的都是对象，从你父级找到上一辈
        console.log(35, Array.prototype.__proto__);
        console.log(36, Object.prototype);
        console.log(37, Array.prototype.__proto__ == Object.prototype);//true
    </script>
</body>

</html>